﻿<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <meta http-equiv="pragma" content="no-cache" />
    <meta http-equiv="Cache-Control" content="no-cache, must-revalidate" />
    <meta http-equiv="expires" content="0" />
    <title>FaceCat</title>
</head>
<body>
    <canvas id="mycanvas" width="1000" height="700" style="position: fixed; left: 0px; top: 0px;"/>
    <script type="text/javascript" src="facecat.js"></script>
    <script type="text/javascript">
        let canvas = document.getElementById("mycanvas"); //绘图区域
        let context = canvas.getContext("2d"); //绘图上下文
        canvas.width = window.innerWidth;
        canvas.height = window.innerHeight;
        let gPaint = new FCPaint(); //绘图对象
        gPaint.canvas = canvas;
        scaleCanvas(gPaint);
        //判断是否移动端
        gPaint.isMobile = isMobileMode();
        if (gPaint.isMobile) {
            gPaint.scaleFactorX = 2.5;
            gPaint.scaleFactorY = 2.5;
        }
        //判断主题色
        gPaint.defaultUIStyle = "light";
        addDefaultEvent(canvas, gPaint);

        /*
        * 鼠标点击实现方法
        * view:视图
        * firstTouch:是否第一次触摸
        * firstPoint:第一次触摸的坐标
        * secondTouch:是否第二次触摸
        * secondPoint:第二次触摸的坐标
        */
        gPaint.onClick = function (view, firstTouch, firstPoint, secondTouch, secondPoint, clicks) {
            onClickDefault(view, firstTouch, firstPoint, secondTouch, secondPoint, clicks);
            if (view.viewName == "Indicator") {
                if (view.text == "BOLL" || view.text == "MA") {
                    tChart.mainIndicator = view.text;
                } else {
                    tChart.showIndicator = view.text;
                }
                calcChartIndicator(tChart);
                let tabView2 = view.parent.parent.parent;
                selectTabPage(tabView2, tabView2.tabPages[0]);
                invalidate(view.paint);
            } else if (view.viewName == "Plot") {
                tChart.addingPlotChart = view.text;
                let tabView3 = view.parent.parent.parent;
                selectTabPage(tabView3, tabView3.tabPages[0]);
                invalidate(view.paint);
            }
        };

        /*
        * 鼠标按下实现方法
        * view:视图
        * mp:坐标
        * button:按钮
        * clicks:点击次数
        * delta:滚轮值
        */
        gPaint.onMouseDown = function (view, mp, buttons, clicks, delta) {
            if (view.viewType == "chart") {
                if (!view.data || view.data.length == 0) {
                    return;
                }
                if (view.addingPlotChart.length > 0) {
                    addPlotDefault(view, true, mp, false, mp);
                    view.addingPlotChart = "";
                    invalidateView(view);
                } else {
                    touchDownChart(view, true, mp, false, mp);
                    invalidateView(view);
                }
            }else{
                onMouseDownDefault(view, mp, buttons, clicks, delta);
            }
        };

        /*
        * 触摸开始方法
        * view:视图
        * firstTouch:是否第一次触摸
        * firstPoint:第一次触摸的坐标
        * secondTouch:是否第二次触摸
        * secondPoint:第二次触摸的坐标
        */
        gPaint.onTouchBegin = function (view, firstTouch, firstPoint, secondTouch, secondPoint) {
            if (view.viewType == "chart") {
                if (!view.data || view.data.length == 0) {
                    return;
                }
                if (view.addingPlotChart.length > 0) {
                    addPlotDefault(view, firstTouch, firstPoint, secondTouch, secondPoint);
                    view.addingPlotChart = "";
                    invalidateView(view);
                } else {
                    touchDownChart(view, firstTouch, firstPoint, secondTouch, secondPoint);
                    invalidateView(view);
                }
            }else{
                onTouchBeginDefault(view, firstTouch, firstPoint, secondTouch, secondPoint);
            }
        };

        /*
         * 重置大小
         */
        let resizeAll = function () {
            try {
                canvas.width = document.documentElement.clientWidth;
                canvas.height = document.documentElement.clientHeight;
                //缩放高清模式
                scaleCanvas(gPaint);
                updateViewDefault(gPaint.views);
            } catch (err) {
                //alert(err);
            }
            invalidate(gPaint);
        };

        /*
        * 监听大小改变
        */
        window.onresize = function () {
            resizeAll();
        };

        /*
        * 旋转监听
        */
        window.onorientationchange = function () {
            resizeAll();
        };

        let securityDatas = [];
        let sData1 = new SecurityData();
        sData1.volume = 78469.756458;
        sData1.close = 15684.25;
        sData1.high = 15965.01;
        sData1.low = 15272.69;
        sData1.open = 15297.22;
        sData1.date = 1605052800.0;
        securityDatas.push(sData1);
        let sData2 = new SecurityData();
        sData2.volume = 102196.366592;
        sData2.close = 16291.87;
        sData2.high = 16340.71;
        sData2.low = 15440.65;
        sData2.open = 15684.26;
        sData2.date = 1605139200.0;
        securityDatas.push(sData2);
        let sData3 = new SecurityData();
        sData3.volume = 75691.891014;
        sData3.close = 16320.71;
        sData3.high = 16480.01;
        sData3.low = 15952.36;
        sData3.open = 16291.86;
        sData3.date = 1605225600.0;
        securityDatas.push(sData3);
        let sData4 = new SecurityData();
        sData4.volume = 59116.357179;
        sData4.close = 16070.46;
        sData4.high = 16327.0;
        sData4.low = 15670.01;
        sData4.open = 16320.05;
        sData4.date = 1605312000.0;
        securityDatas.push(sData4);
        let sData5 = new SecurityData();
        sData5.volume = 43596.851513;
        sData5.close = 15957.01;
        sData5.high = 16180.01;
        sData5.low = 15774.73;
        sData5.open = 16069.57;
        sData5.date = 1605398400.0;
        securityDatas.push(sData5);
        let sData6 = new SecurityData();
        sData6.volume = 81300.685924;
        sData6.close = 16713.58;
        sData6.high = 16880.01;
        sData6.low = 15864.01;
        sData6.open = 15957.01;
        sData6.date = 1605484800.0;
        securityDatas.push(sData6);
        let sData7 = new SecurityData();
        sData7.volume = 115192.02613;
        sData7.close = 17659.39;
        sData7.high = 17858.83;
        sData7.low = 16538.01;
        sData7.open = 16713.09;
        sData7.date = 1605571200.0;
        securityDatas.push(sData7);
        let sData8 = new SecurityData();
        sData8.volume = 141984.264415;
        sData8.close = 17776.13;
        sData8.high = 18476.94;
        sData8.low = 17222.01;
        sData8.open = 17659.39;
        sData8.date = 1605657600.0;
        securityDatas.push(sData8);
        let sData9 = new SecurityData();
        sData9.volume = 93009.571008;
        sData9.close = 17802.83;
        sData9.high = 18179.81;
        sData9.low = 17335.66;
        sData9.open = 17777.76;
        sData9.date = 1605744000.0;
        securityDatas.push(sData9);
        let sData10 = new SecurityData();
        sData10.volume = 88423.028489;
        sData10.close = 18655.68;
        sData10.high = 18815.23;
        sData10.low = 17740.05;
        sData10.open = 17802.82;
        sData10.date = 1605830400.0;
        securityDatas.push(sData10);
        let sData11 = new SecurityData();
        sData11.volume = 71308.137138;
        sData11.close = 18703.81;
        sData11.high = 18965.91;
        sData11.low = 18308.59;
        sData11.open = 18655.67;
        sData11.date = 1605916800.0;
        securityDatas.push(sData11);
        let sData12 = new SecurityData();
        sData12.volume = 74492.806006;
        sData12.close = 18414.61;
        sData12.high = 18750.01;
        sData12.low = 17699.8;
        sData12.open = 18703.81;
        sData12.date = 1606003200.0;
        securityDatas.push(sData12);
        let sData13 = new SecurityData();
        sData13.volume = 74179.661546;
        sData13.close = 18368.01;
        sData13.high = 18766.01;
        sData13.low = 18000.01;
        sData13.open = 18413.89;
        sData13.date = 1606089600.0;
        securityDatas.push(sData13);
        let sData14 = new SecurityData();
        sData14.volume = 70126.693681;
        sData14.close = 19160.02;
        sData14.high = 19410.0;
        sData14.low = 18207.99;
        sData14.open = 18368.02;
        sData14.date = 1606176000.0;
        securityDatas.push(sData14);
        let sData15 = new SecurityData();
        sData15.volume = 70760.56353;
        sData15.close = 18719.12;
        sData15.high = 19444.01;
        sData15.low = 18570.01;
        sData15.open = 19160.01;
        sData15.date = 1606262400.0;
        securityDatas.push(sData15);
        let sData16 = new SecurityData();
        sData16.volume = 102420.321403;
        sData16.close = 17149.48;
        sData16.high = 18915.04;
        sData16.low = 16188.01;
        sData16.open = 18718.84;
        sData16.date = 1606348800.0;
        securityDatas.push(sData16);
        let sData17 = new SecurityData();
        sData17.volume = 84036.578341;
        sData17.close = 17139.53;
        sData17.high = 17457.63;
        sData17.low = 16438.09;
        sData17.open = 17149.48;
        sData17.date = 1606435200.0;
        securityDatas.push(sData17);
        let sData18 = new SecurityData();
        sData18.volume = 60835.734083;
        sData18.close = 17719.86;
        sData18.high = 17880.5;
        sData18.low = 16865.57;
        sData18.open = 17139.54;
        sData18.date = 1606521600.0;
        securityDatas.push(sData18);
        let sData19 = new SecurityData();
        sData19.volume = 55329.026303;
        sData19.close = 18185.0;
        sData19.high = 18360.06;
        sData19.low = 17517.01;
        sData19.open = 17719.85;
        sData19.date = 1606608000.0;
        securityDatas.push(sData19);
        let sData20 = new SecurityData();
        sData20.volume = 96227.350495;
        sData20.close = 19695.88;
        sData20.high = 19777.04;
        sData20.low = 18185.0;
        sData20.open = 18185.01;
        sData20.date = 1606694400.0;
        securityDatas.push(sData20);
        let sData21 = new SecurityData();
        sData21.volume = 100331.141203;
        sData21.close = 18764.97;
        sData21.high = 19888.01;
        sData21.low = 18350.0;
        sData21.open = 19695.88;
        sData21.date = 1606780800.0;
        securityDatas.push(sData21);
        let sData22 = new SecurityData();
        sData22.volume = 75848.875728;
        sData22.close = 19204.1;
        sData22.high = 19342.01;
        sData22.low = 18330.01;
        sData22.open = 18764.97;
        sData22.date = 1606867200.0;
        securityDatas.push(sData22);
        let sData23 = new SecurityData();
        sData23.volume = 64987.682732;
        sData23.close = 19421.91;
        sData23.high = 19598.01;
        sData23.low = 18867.21;
        sData23.open = 19204.09;
        sData23.date = 1606953600.0;
        securityDatas.push(sData23);
        let sData24 = new SecurityData();
        sData24.volume = 65481.220724;
        sData24.close = 18650.53;
        sData24.high = 19527.01;
        sData24.low = 18565.32;
        sData24.open = 19422.35;
        sData24.date = 1607040000.0;
        securityDatas.push(sData24);
        let sData25 = new SecurityData();
        sData25.volume = 42922.758573;
        sData25.close = 19147.67;
        sData25.high = 19177.01;
        sData25.low = 18500.01;
        sData25.open = 18650.52;
        sData25.date = 1607126400.0;
        securityDatas.push(sData25);
        let sData26 = new SecurityData();
        sData26.volume = 37043.101861;
        sData26.close = 19359.41;
        sData26.high = 19420.01;
        sData26.low = 18857.01;
        sData26.open = 19147.67;
        sData26.date = 1607212800.0;
        securityDatas.push(sData26);
        let sData27 = new SecurityData();
        sData27.volume = 40833.661907;
        sData27.close = 19166.91;
        sData27.high = 19420.92;
        sData27.low = 18902.89;
        sData27.open = 19358.68;
        sData27.date = 1607299200.0;
        securityDatas.push(sData27);
        let sData28 = new SecurityData();
        sData28.volume = 56080.515386;
        sData28.close = 18324.12;
        sData28.high = 19294.85;
        sData28.low = 18200.01;
        sData28.open = 19166.91;
        sData28.date = 1607385600.0;
        securityDatas.push(sData28);
        let sData29 = new SecurityData();
        sData29.volume = 75498.213856;
        sData29.close = 18541.29;
        sData29.high = 18639.58;
        sData29.low = 17650.01;
        sData29.open = 18324.12;
        sData29.date = 1607472000.0;
        securityDatas.push(sData29);
        let sData30 = new SecurityData();
        sData30.volume = 52890.685094;
        sData30.close = 18254.64;
        sData30.high = 18557.33;
        sData30.low = 17911.13;
        sData30.open = 18541.3;
        sData30.date = 1607558400.0;
        securityDatas.push(sData30);
        let sData31 = new SecurityData();
        sData31.volume = 72610.734259;
        sData31.close = 18036.54;
        sData31.high = 18292.74;
        sData31.low = 17572.34;
        sData31.open = 18254.82;
        sData31.date = 1607644800.0;
        securityDatas.push(sData31);
        let sData32 = new SecurityData();
        sData32.volume = 47592.761572;
        sData32.close = 18808.7;
        sData32.high = 18948.67;
        sData32.low = 18020.71;
        sData32.open = 18036.54;
        sData32.date = 1607731200.0;
        securityDatas.push(sData32);
        let sData33 = new SecurityData();
        sData33.volume = 56560.831744;
        sData33.close = 19175.0;
        sData33.high = 19411.01;
        sData33.low = 18711.13;
        sData33.open = 18808.7;
        sData33.date = 1607817600.0;
        securityDatas.push(sData33);
        let sData34 = new SecurityData();
        sData34.volume = 47257.211294;
        sData34.close = 19273.15;
        sData34.high = 19349.01;
        sData34.low = 19000.01;
        sData34.open = 19175.0;
        sData34.date = 1607904000.0;
        securityDatas.push(sData34);
        let sData35 = new SecurityData();
        sData35.volume = 61792.483421;
        sData35.close = 19426.44;
        sData35.high = 19570.01;
        sData35.low = 19050.01;
        sData35.open = 19273.7;
        sData35.date = 1607990400.0;
        securityDatas.push(sData35);
        let sData36 = new SecurityData();
        sData36.volume = 97061.040854;
        sData36.close = 21335.53;
        sData36.high = 21560.01;
        sData36.low = 19278.61;
        sData36.open = 19426.44;
        sData36.date = 1608076800.0;
        securityDatas.push(sData36);
        let sData37 = new SecurityData();
        sData37.volume = 148769.444419;
        sData37.close = 22808.99;
        sData37.high = 23699.71;
        sData37.low = 21233.01;
        sData37.open = 21335.53;
        sData37.date = 1608163200.0;
        securityDatas.push(sData37);
        let sData38 = new SecurityData();
        sData38.volume = 79646.144315;
        sData38.close = 23107.4;
        sData38.high = 23285.19;
        sData38.low = 22350.01;
        sData38.open = 22797.16;
        sData38.date = 1608249600.0;
        securityDatas.push(sData38);
        let sData39 = new SecurityData();
        sData39.volume = 82430.712232;
        sData39.close = 23821.62;
        sData39.high = 24171.48;
        sData39.low = 22750.01;
        sData39.open = 23107.4;
        sData39.date = 1608336000.0;
        securityDatas.push(sData39);
        let sData40 = new SecurityData();
        sData40.volume = 74797.201958;
        sData40.close = 23455.53;
        sData40.high = 24295.01;
        sData40.low = 23060.01;
        sData40.open = 23821.61;
        sData40.date = 1608422400.0;
        securityDatas.push(sData40);
        let sData41 = new SecurityData();
        sData41.volume = 83424.441428;
        sData41.close = 22719.72;
        sData41.high = 24102.78;
        sData41.low = 21815.01;
        sData41.open = 23455.55;
        sData41.date = 1608508800.0;
        securityDatas.push(sData41);
        let sData42 = new SecurityData();
        sData42.volume = 87033.13616;
        sData42.close = 23810.8;
        sData42.high = 23837.11;
        sData42.low = 22353.41;
        sData42.open = 22719.89;
        sData42.date = 1608595200.0;
        securityDatas.push(sData42);
        let sData43 = new SecurityData();
        sData43.volume = 112830.021287;
        sData43.close = 23232.77;
        sData43.high = 24100.01;
        sData43.low = 22810.01;
        sData43.open = 23810.8;
        sData43.date = 1608681600.0;
        securityDatas.push(sData43);
        let sData44 = new SecurityData();
        sData44.volume = 69013.844252;
        sData44.close = 23729.21;
        sData44.high = 23794.44;
        sData44.low = 22703.43;
        sData44.open = 23232.4;
        sData44.date = 1608768000.0;
        securityDatas.push(sData44);
        let sData45 = new SecurityData();
        sData45.volume = 78024.251646;
        sData45.close = 24712.48;
        sData45.high = 24789.87;
        sData45.low = 23434.74;
        sData45.open = 23729.0;
        sData45.date = 1608854400.0;
        securityDatas.push(sData45);
        let sData46 = new SecurityData();
        sData46.volume = 97806.523386;
        sData46.close = 26493.4;
        sData46.high = 26867.04;
        sData46.low = 24500.01;
        sData46.open = 24712.48;
        sData46.date = 1608940800.0;
        securityDatas.push(sData46);
        let sData47 = new SecurityData();
        sData47.volume = 145880.8092;
        sData47.close = 26281.67;
        sData47.high = 28422.01;
        sData47.low = 25700.01;
        sData47.open = 26493.41;
        sData47.date = 1609027200.0;
        securityDatas.push(sData47);
        let sData48 = new SecurityData();
        sData48.volume = 79408.740817;
        sData48.close = 27079.42;
        sData48.high = 27500.01;
        sData48.low = 26101.01;
        sData48.open = 26281.55;
        sData48.date = 1609113600.0;
        securityDatas.push(sData48);
        let sData49 = new SecurityData();
        sData49.volume = 69255.341092;
        sData49.close = 27385.01;
        sData49.high = 27410.01;
        sData49.low = 25880.01;
        sData49.open = 27079.43;
        sData49.date = 1609200000.0;
        securityDatas.push(sData49);
        let sData50 = new SecurityData();
        sData50.volume = 95356.067826;
        sData50.close = 28875.55;
        sData50.high = 28996.01;
        sData50.low = 27320.01;
        sData50.open = 27385.01;
        sData50.date = 1609286400.0;
        securityDatas.push(sData50);
        let sData51 = new SecurityData();
        sData51.volume = 75491.419522;
        sData51.close = 28923.64;
        sData51.high = 29300.01;
        sData51.low = 27850.01;
        sData51.open = 28875.56;
        sData51.date = 1609372800.0;
        securityDatas.push(sData51);
        let sData52 = new SecurityData();
        sData52.volume = 54134.113624;
        sData52.close = 29331.7;
        sData52.high = 29600.01;
        sData52.low = 28624.58;
        sData52.open = 28923.64;
        sData52.date = 1609459200.0;
        securityDatas.push(sData52);
        let sData53 = new SecurityData();
        sData53.volume = 126100.088124;
        sData53.close = 32178.34;
        sData53.high = 33300.01;
        sData53.low = 28946.54;
        sData53.open = 29331.71;
        sData53.date = 1609545600.0;
        securityDatas.push(sData53);
        let sData54 = new SecurityData();
        sData54.volume = 110771.806254;
        sData54.close = 33000.06;
        sData54.high = 34778.12;
        sData54.low = 31963.0;
        sData54.open = 32176.46;
        sData54.date = 1609632000.0;
        securityDatas.push(sData54);
        let sData55 = new SecurityData();
        sData55.volume = 121030.155465;
        sData55.close = 31988.72;
        sData55.high = 33600.01;
        sData55.low = 28130.01;
        sData55.open = 33000.06;
        sData55.date = 1609718400.0;
        securityDatas.push(sData55);
        let sData56 = new SecurityData();
        sData56.volume = 111890.475678;
        sData56.close = 33949.54;
        sData56.high = 34360.01;
        sData56.low = 29900.01;
        sData56.open = 31989.76;
        sData56.date = 1609804800.0;
        securityDatas.push(sData56);
        let sData57 = new SecurityData();
        sData57.volume = 116093.037717;
        sData57.close = 36769.37;
        sData57.high = 36939.22;
        sData57.low = 33288.01;
        sData57.open = 33949.54;
        sData57.date = 1609891200.0;
        securityDatas.push(sData57);
        let sData58 = new SecurityData();
        sData58.volume = 121506.449096;
        sData58.close = 39432.29;
        sData58.high = 40365.01;
        sData58.low = 36300.01;
        sData58.open = 36769.37;
        sData58.date = 1609977600.0;
        securityDatas.push(sData58);
        let sData59 = new SecurityData();
        sData59.volume = 138625.042444;
        sData59.close = 40582.82;
        sData59.high = 41950.01;
        sData59.low = 36500.01;
        sData59.open = 39432.49;
        sData59.date = 1610064000.0;
        securityDatas.push(sData59);
        let sData60 = new SecurityData();
        sData60.volume = 75785.989675;
        sData60.close = 40088.23;
        sData60.high = 41380.01;
        sData60.low = 38720.01;
        sData60.open = 40586.97;
        sData60.date = 1610150400.0;
        securityDatas.push(sData60);
        let sData61 = new SecurityData();
        sData61.volume = 112638.990321;
        sData61.close = 38150.03;
        sData61.high = 41350.01;
        sData61.low = 35111.12;
        sData61.open = 40088.23;
        sData61.date = 1610236800.0;
        securityDatas.push(sData61);
        let sData62 = new SecurityData();
        sData62.volume = 231175.583454;
        sData62.close = 35404.48;
        sData62.high = 38264.75;
        sData62.low = 30420.01;
        sData62.open = 38150.03;
        sData62.date = 1610323200.0;
        securityDatas.push(sData62);
        let sData63 = new SecurityData();
        sData63.volume = 133948.161996;
        sData63.close = 34051.25;
        sData63.high = 36628.01;
        sData63.low = 32531.01;
        sData63.open = 35410.38;
        sData63.date = 1610409600.0;
        securityDatas.push(sData63);
        let sData64 = new SecurityData();
        sData64.volume = 124477.924938;
        sData64.close = 37371.39;
        sData64.high = 37850.01;
        sData64.low = 32380.01;
        sData64.open = 34049.16;
        sData64.date = 1610496000.0;
        securityDatas.push(sData64);
        let sData65 = new SecurityData();
        sData65.volume = 102950.399421;
        sData65.close = 39144.51;
        sData65.high = 40100.01;
        sData65.low = 36701.24;
        sData65.open = 37371.39;
        sData65.date = 1610582400.0;
        securityDatas.push(sData65);
        let sData66 = new SecurityData();
        sData66.volume = 111365.804668;
        sData66.close = 36742.23;
        sData66.high = 39747.77;
        sData66.low = 34538.89;
        sData66.open = 39145.22;
        sData66.date = 1610668800.0;
        securityDatas.push(sData66);
        let sData67 = new SecurityData();
        sData67.volume = 86348.441508;
        sData67.close = 35994.99;
        sData67.high = 37950.01;
        sData67.low = 35357.81;
        sData67.open = 36737.44;
        sData67.date = 1610755200.0;
        securityDatas.push(sData67);
        let sData68 = new SecurityData();
        sData68.volume = 80157.737384;
        sData68.close = 35828.62;
        sData68.high = 36852.51;
        sData68.low = 33850.01;
        sData68.open = 35994.99;
        sData68.date = 1610841600.0;
        securityDatas.push(sData68);
        let sData69 = new SecurityData();
        sData69.volume = 70693.90404;
        sData69.close = 36631.28;
        sData69.high = 37469.84;
        sData69.low = 34800.01;
        sData69.open = 35825.0;
        sData69.date = 1610928000.0;
        securityDatas.push(sData69);
        let sData70 = new SecurityData();
        sData70.volume = 79596.541309;
        sData70.close = 35891.5;
        sData70.high = 37850.01;
        sData70.low = 35844.07;
        sData70.open = 36622.47;
        sData70.date = 1611014400.0;
        securityDatas.push(sData70);
        let sData71 = new SecurityData();
        sData71.volume = 89368.432918;
        sData71.close = 35468.24;
        sData71.high = 36415.32;
        sData71.low = 33400.01;
        sData71.open = 35901.95;
        sData71.date = 1611100800.0;
        securityDatas.push(sData71);
        let sData72 = new SecurityData();
        sData72.volume = 134548.811336;
        sData72.close = 30850.14;
        sData72.high = 35600.01;
        sData72.low = 30071.01;
        sData72.open = 35468.24;
        sData72.date = 1611187200.0;
        securityDatas.push(sData72);
        let sData73 = new SecurityData();
        sData73.volume = 138345.853436;
        sData73.close = 32945.18;
        sData73.high = 33826.54;
        sData73.low = 28850.01;
        sData73.open = 30852.0;
        sData73.date = 1611273600.0;
        securityDatas.push(sData73);
        let sData74 = new SecurityData();
        sData74.volume = 64595.297675;
        sData74.close = 32078.01;
        sData74.high = 33456.01;
        sData74.low = 31390.17;
        sData74.open = 32950.01;
        sData74.date = 1611360000.0;
        securityDatas.push(sData74);
        let sData75 = new SecurityData();
        sData75.volume = 57978.047966;
        sData75.close = 32259.91;
        sData75.high = 33071.01;
        sData75.low = 30900.01;
        sData75.open = 32078.01;
        sData75.date = 1611446400.0;
        securityDatas.push(sData75);
        let sData76 = new SecurityData();
        sData76.volume = 88499.236921;
        sData76.close = 32254.21;
        sData76.high = 34875.01;
        sData76.low = 31910.01;
        sData76.open = 32259.46;
        sData76.date = 1611532800.0;
        securityDatas.push(sData76);
        let sData77 = new SecurityData();
        sData77.volume = 84866.207055;
        sData77.close = 32467.78;
        sData77.high = 32921.89;
        sData77.low = 30837.38;
        sData77.open = 32254.2;
        sData77.date = 1611619200.0;
        securityDatas.push(sData77);
        let sData78 = new SecurityData();
        sData78.volume = 95911.971711;
        sData78.close = 30366.16;
        sData78.high = 32557.3;
        sData78.low = 29241.73;
        sData78.open = 32464.02;
        sData78.date = 1611705600.0;
        securityDatas.push(sData78);
        let sData79 = new SecurityData();
        sData79.volume = 92621.155617;
        sData79.close = 33364.87;
        sData79.high = 33783.99;
        sData79.low = 29842.11;
        sData79.open = 30362.2;
        sData79.date = 1611792000.0;
        securityDatas.push(sData79);
        let sData80 = new SecurityData();
        sData80.volume = 193388.622446;
        sData80.close = 34252.21;
        sData80.high = 38531.91;
        sData80.low = 31915.41;
        sData80.open = 33368.19;
        sData80.date = 1611878400.0;
        securityDatas.push(sData80);
        let sData81 = new SecurityData();
        sData81.volume = 82674.758249;
        sData81.close = 34262.89;
        sData81.high = 34933.01;
        sData81.low = 32825.01;
        sData81.open = 34246.29;
        sData81.date = 1611964800.0;
        securityDatas.push(sData81);
        let sData82 = new SecurityData();
        sData82.volume = 66269.928016;
        sData82.close = 33092.99;
        sData82.high = 34342.7;
        sData82.low = 32171.68;
        sData82.open = 34262.9;
        sData82.date = 1612051200.0;
        securityDatas.push(sData82);
        let sData83 = new SecurityData();
        sData83.volume = 80154.567802;
        sData83.close = 33526.38;
        sData83.high = 34717.28;
        sData83.low = 32296.17;
        sData83.open = 33089.45;
        sData83.date = 1612137600.0;
        securityDatas.push(sData83);
        let sData84 = new SecurityData();
        sData84.volume = 78056.66988;
        sData84.close = 35466.25;
        sData84.high = 35984.34;
        sData84.low = 33418.01;
        sData84.open = 33517.1;
        sData84.date = 1612224000.0;
        securityDatas.push(sData84);
        let sData85 = new SecurityData();
        sData85.volume = 80784.343663;
        sData85.close = 37618.88;
        sData85.high = 37662.64;
        sData85.low = 35362.39;
        sData85.open = 35472.72;
        sData85.date = 1612310400.0;
        securityDatas.push(sData85);
        let sData86 = new SecurityData();
        sData86.volume = 89024.320756;
        sData86.close = 36936.67;
        sData86.high = 38708.28;
        sData86.low = 36161.96;
        sData86.open = 37620.27;
        sData86.date = 1612396800.0;
        securityDatas.push(sData86);
        let sData87 = new SecurityData();
        sData87.volume = 65910.531514;
        sData87.close = 38290.25;
        sData87.high = 38310.13;
        sData87.low = 36570.01;
        sData87.open = 36936.66;
        sData87.date = 1612483200.0;
        securityDatas.push(sData87);
        let sData88 = new SecurityData();
        sData88.volume = 94232.612846;
        sData88.close = 39186.95;
        sData88.high = 40955.52;
        sData88.low = 38215.95;
        sData88.open = 38289.33;
        sData88.date = 1612569600.0;
        securityDatas.push(sData88);
        let sData89 = new SecurityData();
        sData89.volume = 81820.439177;
        sData89.close = 38795.7;
        sData89.high = 39700.01;
        sData89.low = 37351.01;
        sData89.open = 39181.02;
        sData89.date = 1612656000.0;
        securityDatas.push(sData89);
        let sData90 = new SecurityData();
        sData90.volume = 121568.794672;
        sData90.close = 46374.88;
        sData90.high = 46794.46;
        sData90.low = 37988.9;
        sData90.open = 38795.7;
        sData90.date = 1612742400.0;
        securityDatas.push(sData90);
        let sData91 = new SecurityData();
        sData91.volume = 114567.009318;
        sData91.close = 46420.43;
        sData91.high = 48142.2;
        sData91.low = 44961.1;
        sData91.open = 46374.87;
        sData91.date = 1612828800.0;
        securityDatas.push(sData91);
        let sData92 = new SecurityData();
        sData92.volume = 78292.89657;
        sData92.close = 44807.59;
        sData92.high = 47310.01;
        sData92.low = 43800.01;
        sData92.open = 46420.43;
        sData92.date = 1612915200.0;
        securityDatas.push(sData92);
        let sData93 = new SecurityData();
        sData93.volume = 81033.184776;
        sData93.close = 47969.52;
        sData93.high = 48678.91;
        sData93.low = 43994.03;
        sData93.open = 44807.59;
        sData93.date = 1613001600.0;
        securityDatas.push(sData93);
        let sData94 = new SecurityData();
        sData94.volume = 81856.490636;
        sData94.close = 47287.61;
        sData94.high = 48985.81;
        sData94.low = 46400.01;
        sData94.open = 47968.67;
        sData94.date = 1613088000.0;
        securityDatas.push(sData94);
        let sData95 = new SecurityData();
        sData95.volume = 58937.84066;
        sData95.close = 47153.7;
        sData95.high = 48150.01;
        sData95.low = 46202.54;
        sData95.open = 47298.16;
        sData95.date = 1613174400.0;
        securityDatas.push(sData95);
        let sData96 = new SecurityData();
        sData96.volume = 70700.864117;
        sData96.close = 48577.8;
        sData96.high = 49707.44;
        sData96.low = 47014.18;
        sData96.open = 47156.79;
        sData96.date = 1613260800.0;
        securityDatas.push(sData96);
        let sData97 = new SecurityData();
        sData97.volume = 63227.659425;
        sData97.close = 47911.11;
        sData97.high = 49010.93;
        sData97.low = 46174.79;
        sData97.open = 48580.48;
        sData97.date = 1613347200.0;
        securityDatas.push(sData97);
        let sData98 = new SecurityData();
        sData98.volume = 78018.176005;
        sData98.close = 49133.46;
        sData98.high = 50080.22;
        sData98.low = 47003.63;
        sData98.open = 47911.11;
        sData98.date = 1613433600.0;
        securityDatas.push(sData98);
        let sData99 = new SecurityData();
        sData99.volume = 84886.224046;
        sData99.close = 52119.72;
        sData99.high = 52618.75;
        sData99.low = 48947.01;
        sData99.open = 49133.46;
        sData99.date = 1613520000.0;
        securityDatas.push(sData99);
        let sData100 = new SecurityData();
        sData100.volume = 58093.930825;
        sData100.close = 51552.61;
        sData100.high = 52530.01;
        sData100.low = 50901.91;
        sData100.open = 52117.68;
        sData100.date = 1613606400.0;
        securityDatas.push(sData100);

        let tChart = null;
        //解析加载XML
        let xml = `<?xml version="1.0" encoding="utf-8"?>
        <html xmlns="facecat">
          <head>
          </head>
          <body>
            <div dock="fill" type="tab" selectedindex="0" name="TabView">
              <div name="TabPage" text="可视化生成" type="tabpage">
                <chart size="200,200" name="Chart" text="Chart" location="212,164" dock="Fill">
                </chart>
              </div>
              <div name="TabPage2" text="指标" type="tabpage" />
              <div name="TabPage3" text="画线" type="tabpage" />
            </div>
          </body>
        </html>`;
        renderFaceCat(gPaint, xml);
        let chart = findViewByName("Chart", gPaint.views);
        chart.backColor = "rgb(255,255,255)";
        chart.borderColor = "rgb(150,150,150)";
        chart.textColor = "rgb(0,0,0)";
        chart.scaleColor = "rgb(0,0,0)";
        chart.crossTipColor = "rgb(220,220,220)";
        chart.crossLineColor = "rgb(100,100,100)";
        chart.gridColor = "rgba(0,0,0,125)";
        tChart = chart;
        let tabPage2 = findViewByName("TabPage2", gPaint.views);
        let tabPage3 = findViewByName("TabPage3", gPaint.views);
        chart.rightVScaleWidth = 60;
        chart.location = new FCPoint(0, 0);
        chart.data = securityDatas;
        chart.mainIndicator = "BOLL"; //主图指标
        chart.showIndicator = "MACD"; //显示指标
        resetChartVisibleRecord(chart);
        checkChartLastVisibleIndex(chart);
        calcChartIndicator(chart);

        let indLayout = new FCLayoutDiv();
        indLayout.location = new FCPoint(0, 0);
        indLayout.size = new FCSize(tabPage2.size.cx, tabPage2.size.cy);
        indLayout.autoWrap = true;
        addViewToParent(indLayout, tabPage2);
        let indicators = new Array();
        indicators.push("MA");
        indicators.push("BOLL");
        indicators.push("MACD");
        indicators.push("KDJ");
        indicators.push("BIAS");
        indicators.push("BBI");
        indicators.push("RSI");
        indicators.push("ROC");
        indicators.push("WR");
        indicators.push("DMA");
        indicators.push("TRIX");
        indicators.push("CCI");
        for (i = 0; i < indicators.length; i++) {
            let button = new FCButton();
            button.text = indicators[i];
            button.viewName = "Indicator";
            button.size = new FCSize(100, 50);
            button.margin = new FCPadding(10, 10, 10, 10);
            button.location = new FCPoint(0, 0);
            addViewToParent(button, indLayout);
        }

        let indLayout2 = new FCLayoutDiv();
        indLayout2.location = new FCPoint(0, 0);
        indLayout2.size = new FCSize(tabPage3.size.cx, tabPage3.size.cy);
        indLayout2.autoWrap = true;
        addViewToParent(indLayout2, tabPage3);

        let plots = new Array();
        plots.push("Line");
        plots.push("Segment");
        plots.push("Ray");
        plots.push("Triangle");
        plots.push("Rect");
        plots.push("Cycle");
        plots.push("CircumCycle");
        plots.push("Ellipse");
        plots.push("AngleLine");
        plots.push("LRLine");
        plots.push("LRChannel");
        plots.push("SymmetricTriangle");
        plots.push("LRBand");
        plots.push("ParalleGram");
        plots.push("SpeedResist");
        plots.push("FiboFanline");
        plots.push("FiboTimezone");
        plots.push("Percent");
        plots.push("BoxLine");
        plots.push("TironeLevels");
        plots.push("QuadrantLines");
        plots.push("Parallel");
        plots.push("GoldenRatio");
        plots.push("ArrowSegment");
        for (i = 0; i < plots.length; i++) {
            let button2 = new FCButton();
            button2.text = plots[i];
            button2.viewName = "Plot";
            button2.size = new FCSize(100, 50);
            button2.margin = new FCPadding(10, 10, 10, 10);
            button2.location = new FCPoint(0, 0);
            addViewToParent(button2, indLayout2);
        }
        updateViewDefault(gPaint.views);
        invalidate(gPaint);
    </script>
</body>
</html>
